import { defineStore } from "pinia";
import { ref } from "vue";

import ACCESS_ENUM from "../assets/content/ACCESS_ENUM";
import { getLoginUserUsingGet } from "../servers/user/api/userController";

export const useUserState = defineStore("userState", () => {
  const initUser = <API.User>{
    id: 0,
    userName: "",
    userAccount: "",
    avatar: "",
    userRole: ACCESS_ENUM.NOT_LOGIN,
  };

  /** 用户信息  */
  const user = ref<API.User>(initUser);

  /** 保存用户状态 */
  const setUserState = (param: API.LoginUserVO) => {
    user.value = { ...param };
  };

  /** 获取登录用户信息态 */
  const getLoginUserState = async () => {
    const { data } = await getLoginUserUsingGet();
    if (data.code === 200) {
      user.value = { ...data.data };
    }
  };

  /** 判断用户是否具有某个权限 */
  const checkUserAccess = (needAccess: string = ACCESS_ENUM.NOT_LOGIN) => {
    // 2、根据不同的权限需求进行判断
    return user.value.userRole === needAccess;
  };

  /** 判断用户权限级别 */
  const matchUserRole = (needAccess: string = ACCESS_ENUM.NOT_LOGIN) => {
    // // 1、如果为不让显示的页面 直接返回false
    if (needAccess === ACCESS_ENUM.DISABLE) {
      return false;
    }
    // 用户为管理员直接返回true
    if (user.value.userRole === ACCESS_ENUM.ADMIN) return true;
    // 用户为普通用户，具有未登录以及登录用户权限
    if (
      user.value.userRole === ACCESS_ENUM.ADMIN &&
      (needAccess === ACCESS_ENUM.USER || needAccess === ACCESS_ENUM.NOT_LOGIN)
    ) {
      return true;
    }
    // 用户为未登录，并且需求为未登录
    if (
      user.value.userRole === ACCESS_ENUM.NOT_LOGIN &&
      needAccess === ACCESS_ENUM.NOT_LOGIN
    ) {
      return true;
    }
    return false;
  };

  return {
    user,
    setUserState,
    getLoginUserState,
    checkUserAccess,
    matchUserRole,
  };
});

// 对应的路由 / 对应的权限 undefined
// 需求的权限 not_login
// 对应的路由 /questionView 对应的权限 undefined
// 需求的权限 not_login
// 对应的路由 /addQuestion 对应的权限 admin
// 需求的权限 admin
// 对应的路由 /meQuestion 对应的权限 admin
// 需求的权限 admin
// 对应的路由 /updateQuestion/:id 对应的权限 disable
// 需求的权限 disable
// 对应的路由 /doQuestion/:id 对应的权限 disable
// 需求的权限 disable
// 对应的路由 /mdeditor 对应的权限 undefined
// 需求的权限 not_login

// 对应的路由 / 对应的权限 undefined
// 需求的权限 not_login
// 对应的路由 /questionView 对应的权限 undefined
// 需求的权限 not_login
// 对应的路由 /addQuestion 对应的权限 admin
// 需求的权限 admin
// 对应的路由 /meQuestion 对应的权限 admin
// 需求的权限 admin
// 对应的路由 /updateQuestion/:id 对应的权限 disable
// 需求的权限 disable
// 对应的路由 /doQuestion/:id 对应的权限 disable
// 需求的权限 disable
// 对应的路由 /mdeditor 对应的权限 undefined
// 需求的权限 not_login
